package main

import (
	"fmt"
	"net/http"
	"time"
)

// 模拟AI模型逐字生成回答
func generateAIResponse(prompt string) <-chan string {
	out := make(chan string)
	go func() {
		defer close(out)
		// 模拟AI思考和生成过程（实际场景中替换为真实模型调用）
		response := "Golang 是一种由Google开发的开源编程语言，它具有简洁、高效、并发支持好等特点。"
		for _, c := range response {
			// 模拟生成延迟（实际根据模型速度调整）
			time.Sleep(100 * time.Millisecond)
			out <- string(c)
		}
		// 发送结束标记（可选，用于前端判断流结束）
		out <- "[DONE]"
	}()
	return out
}

// SSE处理器：接收提问并流式返回回答
func sseHandler(w http.ResponseWriter, r *http.Request) {
	// 设置SSE响应头
	w.Header().Set("Content-Type", "text/event-stream")
	w.Header().Set("Cache-Control", "no-cache")
	w.Header().Set("Connection", "keep-alive")
	w.Header().Set("Access-Control-Allow-Origin", "*") // 允许跨域（生产环境需限制来源）

	// 获取客户端提问（从URL参数或POST表单中）
	prompt := r.URL.Query().Get("prompt")
	if prompt == "" {
		prompt = "介绍一下Golang" // 默认提问
	}

	// 获取AI流式生成的内容
	stream := generateAIResponse(prompt)

	// 逐段推送给客户端
	for chunk := range stream {
		// SSE格式：data: 内容\n\n
		fmt.Fprintf(w, "data: %s\n\n", chunk)
		// 立即刷新缓冲区，确保客户端及时收到
		if f, ok := w.(http.Flusher); ok {
			f.Flush()
		}
		// 如果是结束标记，退出循环
		if chunk == "[DONE]" {
			break
		}
	}
}

func main() {
	http.HandleFunc("/stream", sseHandler)
	fmt.Println("Server running on http://localhost:8080")
	http.ListenAndServe(":8080", nil)
}
